在正式解題之前,當然要先來簡單介紹一下 LeetCode。LeetCode 是一個收集軟體工程師面試題目的網站。也就是說假如你全部刷完,那在 google、facebook 這種公司上班也不是難事了! 等等,不要高興的太早,個人覺得不可能刷完的 T__T。
尤於近幾年 CS 實在太火紅,軟體工程師競爭者越來越多,導致題目越來越多而且越來越難, LeetCode 題目已從前幾年 200 題到現在已經超過 1000 題。刷完根本神人等級了吧! 不過別氣餒,基本上刷 easy 在搭配 medium 並融會貫通後,找一般工作就不是甚麼太大問題了。
假如你不是 CS 科系畢業,刷題花上一兩個小時還解不出來 (像我一樣),完全不用丟臉。一回生,二回熟。學起來就是你的了
曾經試過隨機刷題,但一開始演算法並不熟,每每都弄得很挫折。後來決定先刷同一個類型,例如 Array 30 題刷完再刷 String 這樣。刷完 30 題其實這個類型題目跟概念也大致上有了解。
若不想刷太多也可以先只刷這邊建議的 70 題試水溫
真正面試時跟 LeetCode 真的很像,大致分四部分。我就把它拆出來列在下面。
對於題目講不清楚的地方 "一定要問問題" (後面會說明要問甚麼)
// ------- 1. 題目 ------------
// 167. Two Sum II - Input array is sorted
// Given an array of integers that is already sorted in ascending order,
// find two numbers such that they add up to a specific target number.
// The function twoSum should return indices of the two numbers such
// that they add up to the target, where index1 must be less than index2.
// 請找已排序陣列(小到大)裡,哪兩個數字總和等於 target
// Note:
// Your returned answers (both index1 and index2) are not zero-based.
// You may assume that each input would have exactly one solution and
// you may not use the same element twice.
// Example:
// ------- 2. 範例 ------------
// Input: numbers = [2,7,11,15], target = 9
// Output: [1,2]
// Explanation: The sum of 2 and 7 is 9. Therefore index1 = 1, index2 = 2.
傳進去 (input) 跟傳出來 (output) 的型別
/**
* @param {number[]} numbers //[都是 number]
* @param {number} target
* @return {number[]} // 值都是 number 的 Array
*/
var twoSum = function(numbers, target) {
};
看懂以上後就開始自己猛寫 Try and error了?! 先別急著開始,面試時著重於 "思考"、解決問題能力跟溝通。公司不會想應徵一個完全不溝通也不先跟團隊討論想法的人
var twoSum = function(numbers, target) {
// 想極限,例如只有一個值 [2] target = 2; [2] target = 9
// 很多相同的值 [2, 2, 2]
// 如果有大於兩個結果 [1, 6, 2, 5] target = 7 // 但這部分題目有說明不會發生
// 值是負的 [-1, 8] target 7 因為題目只有說是 integers
let len = numbers.length
// pointer 概念
let pointer = 0
let ind = len - 1;
if(len < 2){
return false;
}
// ... 後面省略
};
盡量不要一開始就看別人的答案,下面有兩種情境我會看別人答案
你的答案至少要比 60% 人快會比較理想。若太低也沒關係。多看看別人的解答與討論很有幫助的。
所以當面試時解出一道題目,會需要下列幾個步驟
明天會來解 561. Array Partition I 跟 905. Sort Array By Parity 若有興趣可以先來試試看
如有錯誤或需要改進的地方,拜託跟我說。
我會以最快速度修改,感謝您
歡迎追蹤我的部落格,除了技術文也會分享一些在矽谷工作的甘苦。
沒見過幾個程式寫得好的美女
看過了幾篇之後
來替妳加加油,按三個
但我認識很多很厲害的女工程師耶
但我認識很多很厲害的女工程師耶
我在比奇堡,跟妳本來就是不同的世界
沒想到在這裡會看到TechLead exGoogle exFacebook
XDDDDDD
雖然常常講屁話但學英文還蠻好用的
他最近也太不幸惹,老婆跑掉,又被FB開除,但是他還能藉機工商XD
正名為 TechLead exGoogle exHusband exFacebook
我想補充一下,不要對跑出來的時間跟記憶體的數字太計較。
剛開始解的時候都很在意,然後會去看頂標的人的寫法跟邏輯,有時候會學到新觀念,但有時候怎麼看就是不覺得那樣寫會比較好。直到有一次我直接 copy 頂標的 code 來跑,怎麼跑都跑不出那個成績,甚至沒有比我寫的好,就覺得在那邊想半天的自己很蠢。
可以參考,不要執著。
好中肯!!